home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / snip0493.zip / CDIR.C < prev    next >
C/C++ Source or Header  |  1993-04-05  |  3KB  |  128 lines

  1. /*
  2. **                          CDIR.C
  3. **
  4. ** Written By:    Lynn R. Lively
  5. ** Date Written:  9/18/91
  6. **
  7. ** Purpose: To provide a change directory facility that will cross
  8. **          drive/partition boundries. Never did understand why
  9. **          MSDOS cd wouldn't do this already.
  10. **
  11. **-----------------------------------------------------------------
  12. ** I hereby place this work into the Public Domain. It may be used
  13. ** for any legal purpose public or private. Use this material at
  14. ** your own risk. I accept no responsibility for the accuracy or
  15. ** usability of the information contained herein. Neither do I
  16. ** accept liability for any possible damage caused by use of this
  17. ** material. However, should you have a problem, question, or
  18. ** suggestion I would be glad to help in any way that I can. You
  19. ** can reach me at (H) 713-893-7875 or (W) 713-591-6611 x 149.
  20. **-----------------------------------------------------------------
  21. */
  22.  
  23. /*
  24. **                          Change History
  25. **
  26. **  Rev #   Date       By      Description of change
  27. **  1.00  | 09/18/91 | LRL | Original Version
  28. **  1.01  | 09/18/91 | RBS | Added MSC, ZTC support for SNIPPETS
  29. **-----------------------------------------------------------------
  30. ** Directory of initials:
  31. ** Initials          Name
  32. ** LRL        Lynn R. Lively
  33. ** RBS        Bob Stout
  34. */
  35.  
  36.  
  37. #include <stdio.h>
  38. #include <string.h>
  39.  
  40. #ifdef __TURBOC__
  41.  #include <dir.h>
  42. #else
  43.  #include <dos.h>
  44.  #include <direct.h>
  45.  
  46.  #ifdef __ZTC__
  47.   #define _dos_getdrive(d) dos_getdrive(d)
  48.   #define _dos_setdrive(d,m) dos_setdrive(d,m)
  49.   #define drive_t unsigned
  50.  #else
  51.   #define drive_t int
  52.  #endif
  53.  
  54.  drive_t getdisk(void)
  55.  {
  56.        drive_t drive;
  57.  
  58.        _dos_getdrive(&drive);
  59.        return drive - 1;
  60.  }
  61.  
  62.  drive_t setdisk(drive_t drive)
  63.  {
  64.        drive_t max_drives;
  65.  
  66.        _dos_setdrive(drive + 1, &max_drives);
  67.        return max_drives - 1;
  68.  }
  69. #endif
  70.  
  71. main (int argc, char * argv[])
  72. {
  73.       int d;
  74.       int max_d;
  75.  
  76.       char wk_str[128];
  77.  
  78.       if (argc > 1)
  79.       {
  80.             strupr (argv[1]);
  81.             if (argv[1][1] == ':')
  82.             {
  83.                   /*
  84.                   ** Find out what the maximum drive number can be.
  85.                   */
  86.  
  87.                   max_d = getdisk ();
  88.                   max_d = setdisk (max_d);
  89.  
  90.                   d = argv[1][0] - 'A';
  91.                   if (d < max_d)
  92.                   {
  93.                         /*
  94.                         ** If the drive specification was valid position to it
  95.                         ** and then do a change directory.
  96.                         */
  97.  
  98.                         setdisk (d);
  99.                         chdir (argv[1]);
  100.                   }
  101.                   else
  102.                   {
  103.                         puts ("Invalid drive specification");
  104.                         return -1;
  105.                   }
  106.             }
  107.             else
  108.             {
  109.                   /*
  110.                   ** If the argument has no drive spec just do a regular
  111.                   ** change directory.
  112.                   */
  113.  
  114.                   chdir (argv[1]);
  115.             }
  116.       }
  117.       else
  118.       {
  119.             /*
  120.             ** If no arguments are passed, return the current working
  121.             ** directory path just like MSDOS cd does.
  122.             */
  123.  
  124.             puts (getcwd (wk_str, sizeof (wk_str)));
  125.       }
  126.       return 0;
  127. }
  128.